Let’s move on to examining an individual’s movement patterns to identify arrival at a carcass site. Going to pick the individual with the longest run:
Visualize acceleration
Okay, that’s not very informative, as expected. Let’s split this by day
and just look at one day’s sequence.
Okay, this is kind of cool. But I’m not good enough at interpreting
accelerometer data to know for sure how to read this.
What about speed and altitude? Can the combination of those tell us
what we need to know?
In order for this to make any sense at all, we need to
cross-reference these measurements with elevation data for Israel. We
can obtain this using the elevatr package.
Now let’s re-do the speed and altitude plots, using altitude above
ground:
Read in the feeding event data (this is the most updated version we have; should work on getting more info from more recent feeding events.)
## [1] 75
## feeding_date feeding_time death_of_carcass_known hours_since_death
## 1 8/30/2020 11:30:00 AM no 24
## 2 9/1/2020 2:15:00 PM no 24
## 3 9/4/2020 10:55:00 AM no 24
## 4 9/6/2020 11:10:00 AM no 24
## 5 9/7/2020 9:20:00 AM no 24
## 6 9/10/2020 1:00:00 PM no 12
## area feeding_station carcass_type weight_of_food
## 1 SdeBoker_Hatira Tzaror_trap donkey, sheep, horse 350
## 2 Small_and_Big_crater Small_crater_view ibex, sheep 130
## 3 SdeBoker_Hatira Tzaror_trap sheep, calf 310
## 4 South_Judean_desert Ben_Yair_view sheep, cow 660
## 5 SdeBoker_Hatira Antenas cow 600
## 6 Ramon_crater Kaolin calf, cow 540
## no_of_carcasses origin_carcass ranger remarks
## 1 3 בדואים עין עבדת לטובת לכידת נשרים
## 2 3 הר הנגב עודד צעירי הונח גם עוף מסוג אמו
## 3 7 מקרר עין עבדת לטובת לכידות נשרים
## 4 2 טללי שדה ג'מיל אל אטרש
## 5 1 טללי שדה יבגני קמינסקי
## 6 2 קיבוץ צאלים ידידה שמואל הצבת שוקת מים
## datetime
## 1 2020-08-30 10:56:53
## 2 2020-09-01 13:16:41
## 3 2020-09-04 09:55:39
## 4 2020-09-06 10:13:52
## 5 2020-09-07 08:40:28
## 6 2020-09-10 12:26:09
##
## Arava_valley Ramon_crater SdeBoker_Hatira
## 7 11 28
## Small_and_Big_crater South_Judean_desert West_negev_sands
## 22 6 1
Okay, now that we have that data, we critically need access to the feeding station data so that we can match these carcass drops to lat/long.
## Feeding_station Active_Not_active ITM_E ITM_N lat long
## 1 Antenas yes 178602 538292 30.9349 34.7770
## 2 Gorni_hill yes 228080 580867 31.319568 35.2951
## 3 Golhan yes 203938 533826 30.8952 35.0422
## 4 Daroch yes 184290 530148 30.8616 34.8368
## 5 Camus_south yes 205225 540429 30.9548 35.0556
## 6 Hahalak_mount yes 203447 530437 30.8646 35.0371
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## Warning in mask$eval_all_mutate(quo): NAs introduced by coercion
## Warning in mask$eval_all_mutate(quo): NAs introduced by coercion
## feeding_date feeding_time death_of_carcass_known hours_since_death
## 1 8/30/2020 11:30:00 AM no 24
## 2 9/1/2020 2:15:00 PM no 24
## 3 9/4/2020 10:55:00 AM no 24
## 4 9/6/2020 11:10:00 AM no 24
## 5 9/7/2020 9:20:00 AM no 24
## 6 9/10/2020 1:00:00 PM no 12
## area feeding_station carcass_type weight_of_food
## 1 SdeBoker_Hatira Tzaror_trap donkey, sheep, horse 350
## 2 Small_and_Big_crater Small_crater_view ibex, sheep 130
## 3 SdeBoker_Hatira Tzaror_trap sheep, calf 310
## 4 South_Judean_desert Ben_Yair_view sheep, cow 660
## 5 SdeBoker_Hatira Antenas cow 600
## 6 Ramon_crater Kaolin calf, cow 540
## no_of_carcasses origin_carcass ranger remarks
## 1 3 בדואים עין עבדת לטובת לכידת נשרים
## 2 3 הר הנגב עודד צעירי הונח גם עוף מסוג אמו
## 3 7 מקרר עין עבדת לטובת לכידות נשרים
## 4 2 טללי שדה ג'מיל אל אטרש
## 5 1 טללי שדה יבגני קמינסקי
## 6 2 קיבוץ צאלים ידידה שמואל הצבת שוקת מים
## datetime lat long
## 1 2020-08-30 10:56:53 30.8615 34.8136
## 2 2020-09-01 13:16:41 30.9490 35.1508
## 3 2020-09-04 09:55:39 30.8615 34.8136
## 4 2020-09-06 10:13:52 31.3321 35.3305
## 5 2020-09-07 08:40:28 30.9349 34.7770
## 6 2020-09-10 12:26:09 NA 34.8491
## Reading layer `CutOffRegion.kml' from data source
## `/Users/kaijagahmpersonalprojects/Desktop/dataExploration/data/CutOffRegion.kml'
## using driver `KML'
## Simple feature collection with 1 feature and 2 fields
## Geometry type: POLYGON
## Dimension: XYZ
## Bounding box: xmin: 33.46685 ymin: 29.47732 xmax: 36.72913 ymax: 33.51767
## z_range: zmin: 0 zmax: 0
## Geodetic CRS: WGS 84
## 428x252 terrain-background map image from Stamen Maps.
## See ?ggmap to plot it.
Okay, now that I know how to plot points and I know when and where the feeding events have occurred, time to plot points around each feeding station, color-coded by individual, around the time of the feeding events.
## Simple feature collection with 6 features and 10 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 34.777 ymin: 30.8615 xmax: 35.3305 ymax: 31.3321
## Geodetic CRS: WGS 84
## feeding_date feeding_time area feeding_station
## 1 8/30/2020 11:30:00 AM SdeBoker_Hatira Tzaror_trap
## 2 9/1/2020 2:15:00 PM Small_and_Big_crater Small_crater_view
## 3 9/4/2020 10:55:00 AM SdeBoker_Hatira Tzaror_trap
## 4 9/6/2020 11:10:00 AM South_Judean_desert Ben_Yair_view
## 5 9/7/2020 9:20:00 AM SdeBoker_Hatira Antenas
## 6 9/12/2020 10:00:00 AM SdeBoker_Hatira Tzaror_trap
## carcass_type weight_of_food no_of_carcasses datetime
## 1 donkey, sheep, horse 350 3 2020-08-30 10:56:53
## 2 ibex, sheep 130 3 2020-09-01 13:16:41
## 3 sheep, calf 310 7 2020-09-04 09:55:39
## 4 sheep, cow 660 2 2020-09-06 10:13:52
## 5 cow 600 1 2020-09-07 08:40:28
## 6 sheep, calf 300 6 2020-09-12 09:00:47
## lat long geometry
## 1 30.8615 34.8136 POINT (34.8136 30.8615)
## 2 30.9490 35.1508 POINT (35.1508 30.949)
## 3 30.8615 34.8136 POINT (34.8136 30.8615)
## 4 31.3321 35.3305 POINT (35.3305 31.3321)
## 5 30.9349 34.7770 POINT (34.777 30.9349)
## 6 30.8615 34.8136 POINT (34.8136 30.8615)
In the supplementary material of Harel et al. 2016, it says that carcasses are usually discovered and consumed within “a few days,” and that feeding by other scavengers also contributes to this. To be conservative, I’m going to examine a 4-day period after carcass deposition, regardless of when the vultures find the carcass. So that’s 96 hours.
I was going to try to animate this, but instead I’m just going to calculate distance over time and plot it. Duh.
Do this for all feeding events.
Let’s assume that all carcasses will be detected within 10 days = 240 hours = 14400 minutes. So we’ll filter the data down to that.
## Rows: 26
## Columns: 15
## Groups: eventID [26]
## $ eventID <int> 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 17, 18, 20, …
## $ ground_speed <dbl> 16.1111111, 4.1666667, 9.4444444, 0.0000000, 8.…
## $ height_above_msl <dbl> 673, 769, 699, 506, 1451, 865, 797, 488, 387, 1…
## $ location_lat <dbl> 30.93593, 30.86246, 30.89881, 30.86148, 30.6513…
## $ location_long <dbl> 34.78006, 34.80872, 35.04202, 34.81364, 34.8489…
## $ timestamp <dttm> 2020-09-08 07:43:08, 2020-09-12 09:02:30, 2020…
## $ dateOnly <date> 2020-09-08, 2020-09-12, 2020-09-17, 2020-09-21…
## $ trackId <chr> "J11w", "A03w", "J18w", "J16w", "J35w", "T99b",…
## $ geometry <POINT [°]> POINT (34.78006 30.93593), POINT (34.8087…
## $ timeSinceCarcassPlaced <drtn> 1382.666667 mins, 103.000000 mins, 660.000000 …
## $ distanceFromCarcass <dbl> 0.313932528, 0.477437719, 0.401299332, 0.004350…
## $ groundElev <dbl> 545, 485, 393, 497, 748, 302, 98, 461, 392, 354…
## $ height_above_ground <dbl> 128, 284, 306, 9, 703, 563, 699, 27, 0, 1032, 1…
## $ detection <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…
## $ visit <lgl> FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE,…
## Rows: 18
## Columns: 15
## Groups: eventID [18]
## $ eventID <int> 6, 8, 9, 11, 12, 13, 15, 17, 20, 23, 31, 36, 38…
## $ ground_speed <dbl> 0.0000000, 0.0000000, 0.0000000, 0.2777778, 0.0…
## $ height_above_msl <dbl> 504, 506, 748, 335, 70, 540, 402, 480, 496, 365…
## $ location_lat <dbl> 30.86165, 30.86148, 30.65264, 30.95561, 30.6413…
## $ location_long <dbl> 34.81364, 34.81364, 34.85444, 35.05579, 35.1556…
## $ timestamp <dttm> 2020-09-12 09:04:02, 2020-09-21 11:39:37, 2020…
## $ dateOnly <date> 2020-09-12, 2020-09-21, 2020-09-23, 2020-09-30…
## $ trackId <chr> "A09w", "J16w", "J35w", "T69b", "A20w", "T69b",…
## $ geometry <POINT [°]> POINT (34.81364 30.86165), POINT (34.8136…
## $ timeSinceCarcassPlaced <drtn> 195.00000 mins, 36.00000 mins, 2009.20000 mins…
## $ distanceFromCarcass <dbl> 0.016680626, 0.004350121, 0.116160694, 0.092181…
## $ groundElev <dbl> 497, 497, 740, 345, 67, 538, 402, 471, 499, 400…
## $ height_above_ground <dbl> 7, 9, 8, 0, 3, 2, 0, 9, 0, 0, 0, 2, 8, 0, 0, 5,…
## $ detection <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…
## $ visit <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…
This looks very similar to the first detection graph. Let’s plot them
against each other:
## [1] NA TRUE NA TRUE TRUE TRUE TRUE TRUE TRUE NA TRUE NA TRUE NA TRUE
## [16] NA NA TRUE NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [1] NA FALSE NA TRUE FALSE FALSE FALSE FALSE FALSE NA FALSE NA
## [13] TRUE NA FALSE NA NA FALSE NA FALSE FALSE TRUE FALSE FALSE
## [25] TRUE TRUE
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.000 0.004 60.242 612.097 847.754 4339.083 8
## # A tibble: 6 × 4
## # Groups: eventID [6]
## eventID detection visit visitLag
## <int> <drtn> <drtn> <drtn>
## 1 5 1382.666667 mins NA mins NA mins
## 2 6 103.000000 mins 195.0000 mins 92.0000 mins
## 3 7 660.000000 mins NA mins NA mins
## 4 8 36.000000 mins 36.0000 mins 0.0000 mins
## 5 9 999.500000 mins 2009.2000 mins 1009.7000 mins
## 6 11 5.533333 mins 335.1167 mins 329.5833 mins
Group by carcass and individual to get each bird’s first visit
## # A tibble: 6 × 15
## # Groups: eventID, trackId [6]
## eventID groun…¹ heigh…² locat…³ locat…⁴ timestamp dateOnly trackId
## <int> <dbl> <dbl> <dbl> <dbl> <dttm> <date> <chr>
## 1 3 0 497 30.9 34.8 2020-09-08 03:49:35 2020-09-08 A00w
## 2 3 0 504 30.9 34.8 2020-09-08 05:15:10 2020-09-08 A03w
## 3 3 0 494 30.9 34.8 2020-09-08 03:50:11 2020-09-08 A04w
## 4 3 0 505 30.9 34.8 2020-09-08 05:21:40 2020-09-08 A09w
## 5 3 0 495 30.9 34.8 2020-09-06 09:36:50 2020-09-06 J11w
## 6 3 0 496 30.9 34.8 2020-09-08 05:15:10 2020-09-08 J12w
## # … with 7 more variables: geometry <POINT [°]>, timeSinceCarcassPlaced <drtn>,
## # distanceFromCarcass <dbl>, groundElev <dbl>, height_above_ground <dbl>,
## # detection <lgl>, visit <lgl>, and abbreviated variable names ¹ground_speed,
## # ²height_above_msl, ³location_lat, ⁴location_long
## # A tibble: 6 × 16
## # Groups: eventID [1]
## eventID groun…¹ heigh…² locat…³ locat…⁴ timestamp dateOnly trackId
## <int> <dbl> <dbl> <dbl> <dbl> <dttm> <date> <chr>
## 1 3 0 503 30.9 34.8 2020-09-06 07:42:26 2020-09-06 T25b
## 2 3 0 499 30.9 34.8 2020-09-06 08:22:28 2020-09-06 J30w
## 3 3 0 495 30.9 34.8 2020-09-06 09:36:50 2020-09-06 J11w
## 4 3 0 488 30.9 34.8 2020-09-08 03:48:50 2020-09-08 T85w
## 5 3 0 489 30.9 34.8 2020-09-08 03:49:10 2020-09-08 J36w
## 6 3 0 484 30.9 34.8 2020-09-08 03:49:10 2020-09-08 T77w
## # … with 8 more variables: geometry <POINT [°]>, timeSinceCarcassPlaced <drtn>,
## # distanceFromCarcass <dbl>, groundElev <dbl>, height_above_ground <dbl>,
## # detection <lgl>, visit <lgl>, nFirstVisits <int>, and abbreviated variable
## # names ¹ground_speed, ²height_above_msl, ³location_lat, ⁴location_long
## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]
##
## [[6]]
##
## [[7]]
##
## [[8]]
##
## [[9]]
##
## [[10]]
this may help us determine depletion.
Aaand it did not. This is really not the pattern I was expecting to see… Still need to get a sense for carcass depletion.
I’m going to be following this tutorial: https://hansenjohnson.org/post/animate-movement-in-r/
## Simple feature collection with 6 features and 60 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 34.81339 ymin: 30.86163 xmax: 34.81348 ymax: 30.8617
## Geodetic CRS: WGS 84
## # A tibble: 6 × 61
## tag_id senso…¹ accel…² accel…³ accel…⁴ barom…⁵ batte…⁶ batte…⁷ exter…⁸ gps_h…⁹
## <int> <int> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 1.26e9 653 183 -158 1012 0 90 0 24 1
## 2 1.26e9 653 17 -113 1031 0 90 0 23 1
## 3 1.26e9 653 88 -211 1008 0 90 0 25 1
## 4 1.26e9 653 -110 -312 993 0 90 0 25 1
## 5 1.26e9 653 -954 -106 356 0 90 0 24 1.1
## 6 1.26e9 653 -1005 -120 -117 0 90 0 24 1.1
## # … with 51 more variables: gps_satellite_count <int>, gps_time_to_fix <dbl>,
## # ground_speed <dbl>, heading <dbl>, height_above_msl <dbl>,
## # import_marked_outlier <chr>, light_level <dbl>, location_lat <dbl>,
## # location_long <dbl>, magnetic_field_raw_x <dbl>,
## # magnetic_field_raw_y <dbl>, magnetic_field_raw_z <dbl>,
## # ornitela_transmission_protocol <chr>, tag_voltage <dbl>, timestamp <dttm>,
## # update_ts <chr>, visible <chr>, deployment_id <dbl>, event_id <dbl>, …
## Simple feature collection with 6 features and 5 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 34.81339 ymin: 30.86163 xmax: 34.81348 ymax: 30.8617
## Geodetic CRS: WGS 84
## # A tibble: 6 × 6
## trackId timestamp ground…¹ locat…² locat…³ geometry
## <chr> <dttm> <dbl> <dbl> <dbl> <POINT [°]>
## 1 A00w 2020-09-08 03:49:35 0 30.9 34.8 (34.81348 30.86163)
## 2 A00w 2020-09-08 03:58:55 0 30.9 34.8 (34.81339 30.86167)
## 3 A00w 2020-09-08 04:08:56 0 30.9 34.8 (34.81345 30.86168)
## 4 A00w 2020-09-08 04:18:56 0 30.9 34.8 (34.81347 30.86164)
## 5 A00w 2020-09-08 04:28:56 0 30.9 34.8 (34.81341 30.86164)
## 6 A00w 2020-09-08 04:38:58 0 30.9 34.8 (34.81344 30.8617)
## # … with abbreviated variable names ¹ground_speed, ²location_lat,
## # ³location_long
## Warning: Removed 10059 row(s) containing missing values (geom_path).
## Warning: Removed 15884 rows containing missing values (geom_point).
Okay, I would have to tweak this animation a lot more in order to really show them arriving at a carcass, I think.
Now we can do the same thing for detections that are NOT visits
## [1] trackId eventID detectionOrder visitOrder
## <0 rows> (or 0-length row.names)
## trackId eventID detectionOrder visitOrder
## 1 J11w 5 1 NA
## 2 Y27b 5 2 NA
## 3 J18w 5 3 NA
## 4 J15w 5 4 NA
## 5 A03w 5 5 NA
## 6 J17w 5 6 NA
## 7 T77w 5 7 NA
## 8 T25b 5 8 NA
## 9 A03w 6 1 NA
## 10 J31w 6 4 NA
## 11 T66w 6 5 NA
## 12 A01w 6 6 NA
## 13 J35w 6 7 NA
## 14 Y27b 6 10 NA
## 15 T85w 6 12 NA
## 16 J18w 7 1 NA
## 17 T79w 7 2 NA
## 18 J12w 7 3 NA
## 19 A09w 7 4 NA
## 20 J35w 7 5 NA
## 21 A03w 7 6 NA
## 22 A20w 7 7 NA
## 23 A04w 7 8 NA
## 24 A05w 7 9 NA
## 25 J15w 7 10 NA
## 26 J11w 7 11 NA
## 27 T76w 7 12 NA
## 28 T25b 7 13 NA
## 29 A18w 7 14 NA
## 30 T69b 7 15 NA
## 31 Y27b 7 16 NA
## 32 T66w 7 17 NA
## 33 J38w 8 4 NA
## 34 J30w 9 7 NA
## 35 J31w 9 8 NA
## 36 J35w 12 3 NA
## 37 J19w 13 1 NA
## 38 T85w 13 3 NA
## 39 J36w 13 5 NA
## 40 J31w 13 6 NA
## 41 J15w 13 9 NA
## 42 T25b 15 29 NA
## 43 T77w 15 32 NA
## 44 J39w 16 1 NA
## 45 J15w 16 2 NA
## 46 J11w 16 3 NA
## 47 A00w 17 26 NA
## 48 A09w 18 1 NA
## 49 T69b 18 2 NA
## 50 J34w 20 1 NA
## 51 A20w 20 2 NA
## 52 J11w 20 4 NA
## 53 A03w 20 5 NA
## 54 J06w 20 7 NA
## 55 J38w 21 1 NA
## 56 J33w 21 2 NA
## 57 T85w 21 3 NA
## 58 J36w 21 4 NA
## 59 T17w 21 5 NA
## 60 A05w 21 6 NA
## 61 J18w 21 7 NA
## 62 J34w 21 8 NA
## 63 A76w 21 9 NA
## 64 T79w 21 10 NA
## 65 J12w 21 11 NA
## 66 A04w 21 12 NA
## 67 Y27b 21 13 NA
## 68 J06w 21 14 NA
## 69 A09w 21 15 NA
## 70 J35w 21 16 NA
## 71 T69b 21 17 NA
## 72 J33w 23 4 NA
## 73 A04w 23 11 NA
## 74 A13w 25 1 NA
## 75 A15w 25 2 NA
## 76 J17w 25 3 NA
## 77 A03w 25 4 NA
## 78 A15w 29 1 NA
## 79 A15w 31 15 NA
## 80 T79w 33 1 NA
## 81 T69b 33 2 NA
## 82 A05w 33 3 NA
## 83 Y27b 33 4 NA
## 84 A15w 33 5 NA
## 85 A05w 36 10 NA
## 86 T17w 38 1 NA
## 87 J15w 38 2 NA
## 88 A76w 38 4 NA
## 89 A03w 38 5 NA
## 90 J17w 38 6 NA
## 91 A13w 40 8 NA
## 92 T25b 40 10 NA
## 93 A04w 47 14 NA
## 94 T99b 50 1 NA
## 95 J15w 50 11 NA
## 96 A04w 53 1 NA
## Warning: Removed 96 rows containing non-finite values (stat_smooth).
## Warning: Removed 96 rows containing missing values (geom_point).
There is usually a relationship between detections and visits–i.e. those that detect the carcass later are also later to visit. But this isn’t always the case–in a few cases, there seems to be a negative relationship (those that first detect the carcass visit later than those that detect it later.)